package org.example.message_queue.common;

import java.io.*;

public class BinaryTool {
//    静态方法
//    把一个对象序列化成一个字节数组
    public static byte[] toBytes(Object object) throws IOException {
//        将Object序列化数据 写入byteArrayOutputStream 中，最后统一转成byte[]
//        搞出一个可变长数组
        try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()){
//            通过ObjectOutputStream来进行序列化操作
            try(ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream)){
//              writeObject会将该对象进行序列化，生成的二进制数据，会写入objectOutputStream，其又关联到byteArrayOutputStream，最终结果是写在byteArrayOutputStream中的
                objectOutputStream.writeObject(object);
            }
//            将byteArrayOutputStream中的二进制数据取出来，转出byte[]
            return byteArrayOutputStream.toByteArray();
        }
    }
//    把一个字节数组,反序列化成一个对象
    public static Object fromBytes(byte[] data) throws IOException, ClassNotFoundException {
        Object object = null;
        try(ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(data)){
            try(ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream)){
//                readObject就是从data这个byte[]中，读取数据，并进行反序列化
                object = objectInputStream.readObject();
            }
            return object;
        }
    }
}
